package com.leinao.file.service;

import com.leinao.commons.Response;
import com.leinao.file.dto.FilePageDto;
import com.leinao.login.dto.LoginResultDto;

import javax.servlet.http.HttpServletResponse;

/**
 *
 * @Description 文件处理中心
 * @author lizi
 * @date 2018/10/16 上午10:36
 * @Version 1.0
 */
public interface BusinessFileService {

     /**
      * @Description 项目创建仓库初始化
      * @param projectName : 项目名称
	  * @param timestamp : 时间戳，可以用来保证代码仓库名唯一
	  * @param userInfo : 用户信息
	  * @author lizi
      * @date 2018/12/19 下午3:12
      */
	 Response<String> initRepository(String projectName, String timestamp, LoginResultDto userInfo);

	/**
	 * @Description 克隆公开项目代码
	 * @param projectId : 项目ID
	 * @param projectName : 项目名称
	 * @param timestamp : 时间戳，可以用来保证代码仓库名唯一
	 * @param maxTag 最大任务标签
	 * @param tags 任务标签，多个逗号隔开
	 * @param userInfo : 用户信息
	 * @author lizi
	 * @date 2018/12/19 下午3:12
	 */
	Response<String> cloneRepository(Long projectId, String projectName, String timestamp, String maxTag, String tags, LoginResultDto userInfo);

	/**
	 * @Description 提交任务打标签
	 * @param projectId : 项目ID
	 * @param tag 任务名
	 * @param userInfo : 用户信息
	 * @author lizi
	 * @date 2018/12/19 下午3:12
	 */
	Response<String> addTag(Long projectId, String tag, LoginResultDto userInfo);

     /**
      * @Description 获取公开项目文件列表
      * @param projectId : 项目ID
      * @param dir 目录
      * @param pageNumber 当前页
	  * @param pageSize 每业条数
      * @author suqiliang
      * @Date 2018年7月2日 上午11:28:35
      */
	 Response<FilePageDto> getPublicProjectFileList(Long projectId, String dir, Integer pageNumber, Integer pageSize);

	/**
	 * @Description 获取公开任务文件列表
	 * @param projectPublicJobId : 公开任务ID
	 * @param dir 目录
	 * @param pageNumber 当前页
	 * @param pageSize 每业条数
	 * @author suqiliang
	 * @Date 2018年7月2日 上午11:28:35
	 */
	Response<FilePageDto> getProjectPublicJobFileList(Long projectPublicJobId, String dir, Integer pageNumber, Integer pageSize);

	/**
	 * @Description 获取个人项目文件列表
	 * @param projectJobId : 个人任务ID
	 * @param dir 目录
	 * @param pageNumber 当前页
	 * @param pageSize 每业条数
	 * @param userInfo : 用户信息
	 * @author suqiliang
	 * @Date 2018年7月2日 上午11:28:35
	 */
	Response<FilePageDto> getProjectJobFileList(Long projectJobId, String dir, Integer pageNumber, Integer pageSize, LoginResultDto userInfo);

	/**
	 * @Description 公开项目文件预览
	 * @param projectId : 项目ID
	 * @param dir : 文件路径
	 * @param response response对象
	 * @author lizi
	 * @date 2018/12/18 下午5:57
	 */
	void previewPublicProjectFile(Long projectId, String dir, HttpServletResponse response);

	/**
	 * @Description 公开任务文件预览
	 * @param projectPublicJobId : 公开任务ID
	 * @param dir : 文件路径
	 * @param response response对象
	 * @author lizi
	 * @date 2018/12/18 下午5:57
	 */
	void previewPublicProjectJobFile(Long projectPublicJobId, String dir, HttpServletResponse response);

	/**
	 * @Description 公开任务文件预览
	 * @param projectJobId : 任务ID
	 * @param dir : 文件路径
	 * @param userInfo : 用户信息
	 * @param response response对象
	 * @author lizi
	 * @date 2018/12/18 下午5:57
	 */
	void previewProjectJobFile(Long projectJobId, String dir, LoginResultDto userInfo, HttpServletResponse response);

	/**
	 * @Description 公开项目远程仓库文件下载 支持批量下载
	 * @param projectId : 项目ID
	 * @param dirs : 下载路径
	 * @param response response对象
	 * @author lizi
	 * @date 2018/11/19 下午9:07
	 */
	void downloadPublicProjectFile(Long projectId, String[] dirs, HttpServletResponse response);

	/**
	 * @Description 公开项目远程仓库文件下载 支持批量下载
	 * @param projectPublicJobId : 公开任务ID
	 * @param dirs : 下载路径
	 * @param response response对象
	 * @author lizi
	 * @date 2018/11/19 下午9:07
	 */
	void downloadPublicProjectJobFile(Long projectPublicJobId, String[] dirs, HttpServletResponse response);

	/**
	 * @Description 公开项目远程仓库文件下载 支持批量下载
	 * @param projectJobId : 任务ID
	 * @param dirs : 下载路径
	 * @param userInfo : 用户信息
	 * @param response response对象
	 * @author lizi
	 * @date 2018/11/19 下午9:07
	 */
	void downloadProjectJobFile(Long projectJobId, String[] dirs, LoginResultDto userInfo, HttpServletResponse response);

     /**
      * @Description 获取公开数据集文件列表
      * @param userId  用户id
      * @param number  数据集编号
      * @author suqiliang
	  * @Date 2018年12月18日 下午5:28:35
      * @return
      */
	 Response<FilePageDto> getPublicDatasetFileList(String userId, String number);

	/**
	 * @Description 公开数据集文件预览
	 * @param userId : 用户ID
	 * @param number : 数据集编号
	 * @param filePath : 文件路径
	 * @param response : response对象 
	 * @author lizi
	 * @date 2019/03/19 下午5:33
	 */
	 void previewPublicDatasetFile(String userId, String number, String filePath, HttpServletResponse response);

	 /**
	  * @Description 创建任务输出目录
	  * @param userId : 用户ID
	  * @param projectId : 项目ID
	  * @param jobNumber : 任务编号
	  * @author lizi
	  * @date 2019/03/25 下午5:33
	  */
	 Response<String> createJobOutputs(String userId, Long projectId, Integer jobNumber);

	/**
	 * @Description 	复制output文件到数据集文件目录
	 * @param projectId 项目Id
	 * @param jobName		任务名称
	 * @param dir		目录
	 * @param userInfo	用户信息
	 * @return
	 * @author:    weiwei
	 * @Date:  2019/5/18 16:19
	 */
	Response<Void> copyOutputFile(Long projectId, String jobName, String dir, LoginResultDto userInfo);

	/**
	 * 功能描述: 获取项目-任务的输出output目录
	 * @param userId 用户ID
	 * @param projectId 项目ID
	 * @param jobName 任务名
	 * @param dir 项目路径
	 * @param pageNumber 当前页
	 * @param pageSize 每页条数
	 * @return com.leinao.commons.Response<com.leinao.file.dto.FilePageDto> 分页文件信息
	 * @Author: guoliangbo
	 * @Date: 2019/5/20 17:47
	 */
	Response<FilePageDto> getJobOutPutFileList(String userId, Long projectId, String jobName, String dir, Integer pageNumber, Integer pageSize);

	/**
	 * 功能描述： 下载outputs中的文件
	 * @param userId 用户id
	 * @param projectId 项目id
	 * @param jobName 任务名
	 * @param dirs 下载路径
	 * @param response respose
	 * @Return:void
	 * @Author: Guo Liangbo
	 * @Date:2019/5/20 21:27
	 */
	void jobOutputFileDownload(String userId, Long projectId, String jobName, String[] dirs, HttpServletResponse response);

	/**
	 * 功能描述: 获取公开项目-任务的输出output目录
	 * @param userId 用户ID
	 * @param projectId 项目ID
	 * @param jobName 任务名
	 * @param dir 项目路径
	 * @param pageNumber 当前页
	 * @param pageSize 每页条数
	 * @return com.leinao.commons.Response<com.leinao.file.dto.FilePageDto> 分页文件信息
	 * @Author: guoliangbo
	 * @Date: 2019/5/20 17:47
	 */
	Response<FilePageDto> getPublicJobOutPutFileList(String userId, Long projectId, String jobName, String dir, Integer pageNumber, Integer pageSize);

	/**
	  * 功能描述：预览任务详情中的output Tab页中文件
	  * @param projectId 项目id
	  * @param jobName 任务买那个
	  * @param dir 路径
	  * @param response res详情
	  * @Return:void
	  * @Author: Guo Liangbo
	  * @Date:2019/6/10 21:44
	  */
	void previewJobOutputFile(Long projectId, String jobName, String dir, HttpServletResponse response);

	/**
	 * 功能描述：预览公开任务详情中的output Tab页中文件
	 * @param projectId 项目id
	 * @param jobName 任务买那个
	 * @param dir 路径
	 * @param response res详情
	 * @Return:void
	 * @Author: Guo Liangbo
	 * @Date:2019/6/10 21:44
	 */
	void previewPublicJobOutputFile(Long projectId, String jobName, String dir, HttpServletResponse response);

	public Response<Void> copyOutputFileForModel(String projectName, Integer codeNo, String userId,String modelName);
	/**
	  * @Description  获取1.0用户文件列表
	  * @param userInfo
	  * @param pageNumber
	  * @param pageSize
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/6/21 18:25
	  */
	Response<FilePageDto> getUserHomeFileList(LoginResultDto userInfo, Integer pageNumber, Integer pageSize);

	/**
	  * @Description 复制文件到数据集/模型
	  * @param userInfo
	  * @param dirs
	  * @param type
	  * @param targetDir
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/6/24 11:11
	  */
	Response<String> copyFilesToDataSetOrModel(LoginResultDto userInfo, String[] dirs, Integer type, String targetDir);
}
